package com.hjx.util;

import com.mysql.jdbc.Driver;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;

/*
       书数据库操作方式： 使用预编译进行操作mysql
       author:hjx
       time:2021/10/17
       address:gznu
 */

public class JdbcUtil {
    private static String driver;
    private static String user;
    private static String pass;
    private static String url;
    private static Connection con=null;
    private static PreparedStatement psmt=null;


//    创建连接
    public static void createConnection(){
        ReadProperties();
        try {
            Class.forName(driver);
//        获取连接对象
            con= DriverManager.getConnection(url,user,pass);
        }catch (ClassNotFoundException | SQLException e){
            e.getMessage();
        }
        if (con!=null){
            System.out.println("连接对象建立成功！");
        }else {
            System.out.println("连接对象建立失败");
        }
    }


    //读取mysql连接文件db.properties   通过Properties
    public static void ReadProperties(){
        Properties properties=new Properties();
//        通过类加载器读取对应的资源
        InputStream in=JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
        try {
            properties.load(in);  //对资源进行加载
        }catch (IOException e){
            e.getMessage();
        }
//        获取连接属性
        driver=properties.getProperty("driver");
        user=properties.getProperty("user");
        pass=properties.getProperty("pass");
        url=properties.getProperty("url");
    }


//    查询用户信息，直接传入用户的一个对象
    public static ResultSet find(Object[] params,String sql)throws Exception{
        int i=0;
        if (con!=null){
            //        得到预编译对象
            psmt=con.prepareStatement(sql);
        }else {
                System.out.println("connection对象为空");
        }
       if (params!=null){
           for (i = 0; i < params.length; i++) {
//            用于将查询的参数放入第几个?从第1个开始
               psmt.setObject(i+1,params[i]);
           }
       }else {
           psmt.executeQuery();
       }
//        执行sql
        ResultSet resultSet=psmt.executeQuery();
        //注意记得关闭资源
        return resultSet;
    }

//    对增、删、改进行sql操作
    public static int Change(Object[] params,String sql)throws Exception{
        System.out.println("进入更新业务了！");
        int j=0;
        int count=0;
        if(con!=null){
            psmt=con.prepareStatement(sql);
        }else {
            System.out.println("connection对象为空");
        }
        if(params==null){
            count=psmt.executeUpdate();
        }else {
            System.out.println("即将打印更新日志");
            for(j=0;j<params.length;j++){
                System.out.println("parms.length="+params.length);
                psmt.setObject(j+1,params[j]);
            }
            count=psmt.executeUpdate();
        }

        return count;
    }

//    关闭资源
    public static void closeResources(ResultSet resultSet)throws Exception{
        con.close();
        if(psmt!=null){
            psmt.close();
        }
        if (resultSet!=null){
            resultSet.close();
        }
    }


}
